package 炫彩元素类

import (
	xc "gitee.com/go_888/xcgui/xcgui/xc"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
)

// ProgressBar 进度条.
type ProgressBar struct {
	X结构_基础元素
}

// 进度条_创建, 创建进度条元素.
//
// x: 元素x坐标.
//
// y: 元素y坐标.
//
// cx: 宽度.
//
// cy: 高度.
//
// hParent: 父是窗口资源句柄或UI元素资源句柄.如果是窗口资源句柄将被添加到窗口.
func X创建进度条(元素x坐标, 元素y坐标, 宽度, 高度 int32, 父窗口句柄 int) *ProgressBar {
	p := &ProgressBar{}
	p.X设置句柄(xc.X进度条_创建(元素x坐标, 元素y坐标, 宽度, 高度, 父窗口句柄))
	return p
}

// 从句柄创建对象.
func X创建进度条并按句柄(句柄 int) *ProgressBar {
	p := &ProgressBar{}
	p.X设置句柄(句柄)
	return p
}

// 从name创建对象, 失败返回nil.
func X创建进度条并按名称(名称 string) *ProgressBar {
	handle := xc.X取对象并按名称(名称)
	if handle > 0 {
		p := &ProgressBar{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID创建对象, 失败返回nil.
func X创建进度条并按UID(UID int32) *ProgressBar {
	handle := xc.X取对象并按UID(UID)
	if handle > 0 {
		p := &ProgressBar{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID名称创建对象, 失败返回nil.
func X创建进度条并按UID名称(名称 string) *ProgressBar {
	handle := xc.X取对象并按UID名称(名称)
	if handle > 0 {
		p := &ProgressBar{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 进度条_置范围, 设置范围.
//
// range_: 范围.
func (p *ProgressBar) X设置范围(范围 int32) *ProgressBar {
	xc.X进度条_设置范围(p.X句柄, 范围)
	return p
}

// 进度条_取范围.
func (p *ProgressBar) X取范围() int32 {
	return xc.X进度条_取范围(p.X句柄)
}

// 进度条_置进度图片.
//
// hImage: 图片句柄.
func (p *ProgressBar) X设置进度图片(图片句柄 int) *ProgressBar {
	xc.X进度条_设置进度图片(p.X句柄, 图片句柄)
	return p
}

// 进度条_置进度, 设置位置点.
//
// pos: 位置点.
func (p *ProgressBar) X设置进度(位置点 int32) *ProgressBar {
	xc.X进度条_设置进度(p.X句柄, 位置点)
	return p
}

// 进度条_取进度, 获取当前位置点.
func (p *ProgressBar) X取进度() int32 {
	return xc.X进度条_取进度(p.X句柄)
}

// 进度条_置水平, 设置水平或垂直.
//
// bHorizon: 水平或垂直.
func (p *ProgressBar) X设置水平(水平或垂直 bool) *ProgressBar {
	xc.X进度条_设置水平(p.X句柄, 水平或垂直)
	return p
}

// 进度条_启用缩放, 缩放进度贴图为当前进度区域(当前进度所显示区域), 否则为整体100进度区域.
//
// bStretch: 缩放.
func (p *ProgressBar) X启用缩放(缩放 bool) *ProgressBar {
	xc.X进度条_启用缩放(p.X句柄, 缩放)
	return p
}

// 进度条_启用进度文本 显示进度值文本.
//
// bShow: 是否启用.
func (p *ProgressBar) X启用进度文本(是否启用 bool) *ProgressBar {
	xc.X进度条_启用进度文本(p.X句柄, 是否启用)
	return p
}

// 进度条_置进度颜色. 设置进度颜色.
//
// color: xc.RGBA 颜色.
func (p *ProgressBar) X设置进度颜色(ABGR颜色 int) *ProgressBar {
	xc.X进度条_设置进度颜色(p.X句柄, ABGR颜色)
	return p
}

// ------------------------- 事件 ------------------------- //

type X事件_进度条_进度改变 func(pos int32, pbHandled *bool) int            // 进度条元素,进度改变事件.
type X事件_进度条_进度改变1 func(hEle int, pos int32, pbHandled *bool) int // 进度条元素,进度改变事件.

// 进度条元素,进度改变事件.
func (p *ProgressBar) X事件_进度改变(回调函数 X事件_进度条_进度改变) bool {
	return xc.X元素_注册事件C(p.X句柄, xcc.X元素事件_进度条_进度改变, 回调函数)
}

// 进度条元素,进度改变事件.
func (p *ProgressBar) X事件_进度改变1(回调函数 X事件_进度条_进度改变1) bool {
	return xc.X元素_注册事件C1(p.X句柄, xcc.X元素事件_进度条_进度改变, 回调函数)
}

// ------------------------- AddEvent ------------------------- //

// AddEvent_ProgressBar_Change 添加进度条元素进度改变事件.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (p *ProgressBar) AddEvent_ProgressBar_Change(pFun X事件_进度条_进度改变1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(p.X句柄, xcc.X元素事件_进度条_进度改变, onXE_PROGRESSBAR_CHANGE, pFun, allowAddingMultiple...)
}

// onXE_PROGRESSBAR_CHANGE 进度条元素进度改变事件.
func onXE_PROGRESSBAR_CHANGE(hEle int, pos int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_进度条_进度改变)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_进度条_进度改变1)(hEle, pos, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}
